package com.hruiworks.campusgroup.service;

import com.hruiworks.campusgroup.pojo.entity.Administrator;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hruiworks.campusgroup.pojo.request.AdministratorCreateRequest;
import com.hruiworks.campusgroup.pojo.request.AdministratorUpdateRequest;
import com.hruiworks.campusgroup.pojo.vo.AdministratorInfoVo;
import com.hruiworks.usercheck.pojo.entity.JwtEntity;

import java.util.List;

/**
 * @author jiushu
 * @description 针对表【administrator(管理员表)】的数据库操作Service
 * @createDate 2025-02-13 09:44:00
 */
public interface AdministratorService extends IService<Administrator> {

    /**
     * 创建管理员
     *
     * @param administratorCreateRequest 创建管理员的信息
     * @param administratorId            当前登录id
     * @return 创建对象的信息
     */
    AdministratorInfoVo createAdministrator(AdministratorCreateRequest administratorCreateRequest, Long administratorId);


    /**
     * 管理员登录
     *
     * @param username 用户名
     * @param password 密码
     * @return 返回生成的jwt及对应的签名key
     */
    JwtEntity administratorLogin(String username, String password);


    /**
     * 删除管理员
     *
     * @param currentAdministratorId 当前登录的管理员Id
     * @param targetAdministratorId  目标Id
     * @return 删除情况
     */
    boolean deleteAdministrator(Long currentAdministratorId, Long targetAdministratorId);

    /**
     * 更新管理员密码
     * <p>
     * 业务逻辑，管理员账号应有分发的方式创建，只允许修改密码
     *
     * @param administratorUpdateRequest 管理员更新请求参数
     * @param currentAdministratorId     当前登录用户Id
     * @return 修改结果
     */
    Integer updateAdministrator(AdministratorUpdateRequest administratorUpdateRequest, Long currentAdministratorId);


    /**
     * 获取当前登录管理员的信息
     *
     * @param administratorId 管理员Id
     * @return 脱敏的管理员信息
     */
    AdministratorInfoVo getCurrentAdministratorInfo(Long administratorId);


    /**
     * 获取当前管理员创建的管理员
     * @param currentAdministrator 当前登录的管理员
     * @return 脱敏信息列表
     */
    List<AdministratorInfoVo> listAdministratorInfo(Administrator currentAdministrator, String searchValue);
}
